/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 *
 * https://www.renren.io
 *
 * 版权所有，侵权必究！
 */

package com.songlanyun.common.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.formula.functions.T;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;


/**
 * Map工具类
 *
 * @author Mark sunlightcs@gmail.com
 */
public class MapUtils extends HashMap<String, Object> {

    @Override
    public MapUtils put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    /** 判断 key 慧不存在 ，判断value 是否为null  否则返回 "" **/
    public static String getValue(HashMap map, String key){
        if (map.containsKey(key)){
            String value=map.get(key).toString();
         if (value==null)
             return "";
         else
             return value;
        }else
            return "";
    }

    /** 判断 key 慧不存在 ，判断value 是否为null  否则返回 "" **/
    public static String getValueWithNull(HashMap map, String key){
        if (map.containsKey(key)){
            String value=map.get(key).toString();
            if (value==null || value.length()==0)
                return null;
            else
                return value;
        }else
            return null;
    }

    /** map转实体 **/
    public static Object transMap(Class type, Map map) throws Exception {


        Object obj = type.newInstance();//实例化类
        BeanInfo info = Introspector.getBeanInfo(type);//获取类中属性

        PropertyDescriptor[] propertyPermissions = info.getPropertyDescriptors();

        for (PropertyDescriptor pro : propertyPermissions) {

            String proName = pro.getName();
            if(map.containsKey(proName)){
                Object methodName = map.get(proName);
                Object[] args = {methodName};
                try {
                    pro.getWriteMethod().invoke(obj,args);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

        }

        return obj;
    }

    /**
     * Object 转 HashMap<String,Object>
     * @param object 对象类需要有public无参构造，字段属性需要是public ，
     *               并且内部类也需要这样.
     * @return
     */
    public static HashMap<String,Object> objectToMap(Object object){
        return JSONObject.parseObject(JSONObject.toJSONString(object),HashMap.class);
    }

}
